TARGET = client

BUILD_DIR := $(START_MAKE)/$(BUILD_DIR)
TEST_DIR := $(START_MAKE)/$(TEST_DIR)

DEFINES = _GNU_SOURCE
INC_DIR = . ..

SRC_DIR = . ..

#重定位 lib 目录
LIB_DIR_DYNAMIC := $(START_MAKE)/$(LIB_DIR_DYNAMIC)
LIB_DIR_STATIC := $(START_MAKE)/$(LIB_DIR_STATIC)

#指定头文件的路径
CFLAGS = $(patsubst %, -I%, $(INC_DIR))
CFLAGS += $(patsubst %, -D%, $(DEFINES))
CFLAGS += -lpthread
CFLAGS += -g
#指定源文件的路径
VPATH = $(SRC_DIR) $(TEST_DIR)

#头文件
INCS = $(foreach dir,$(INC_DIR),$(wildcard $(dir)/*.h))
#源文件
SRCS = $(foreach dir,$(SRC_DIR),$(wildcard $(dir)/*.c))
#目标文件（*.o） 每一个源文件对应一个目标文件
OBJS = $(patsubst %.c, $(BUILD_DIR)/%.o, $(notdir $(SRCS)))
DYNAMIC_LIBS = $(foreach dir,$(LIB_DIR_DYNAMIC),$(wildcard $(dir)/*.so))
STATIC_LIBS = $(foreach dir,$(LIB_DIR_STATIC),$(wildcard $(dir)/*.a))

#target:
#	echo $(origin M)

$(BUILD_DIR)/$(TARGET): $(OBJS) $(TEST_DIR)/client_test.c 
	@$(CC) -o $@ $^ $(CFLAGS)

#生成目标文件.o (待尝试:可以改动一下，每个源文件对应一个头文件)
$(BUILD_DIR)/%.o: %.c $(INCS) | create_build
	@$(CC) -c $< -o $@  $(CFLAGS)


.PHONY:create_build lib_create clean

create_build:
	@mkdir -p $(BUILD_DIR)

#库的生成依赖于.o文件
lib_create: $(OBJS)
#	gcc -shared -fPIC -o $(LIB_DIR_DYNAMIC)/libclient.so $^
	@ar -rcs $(LIB_DIR_STATIC)/libclient.a $^

clean:
	@rm -f $(LIB_DIR_DYNAMIC)/libclient.so
	@rm -f $(LIB_DIR_STATIC)/libclient.a
